home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / gvram.s < prev    next >
Text File  |  1999-06-14  |  6KB  |  304 lines

  1. *    gvram    グラフィック画面に背景を描く
  2.  
  3.     .include    IOCSCALL.MAC
  4.  
  5.     .text
  6.     .even
  7.  
  8.     .xdef    _GvramInit,_GvramMove,_GvramTini
  9.     .xref    _bg_map,_bg_sp,_stage,_bg_contrast_control
  10.     .xref    _bg_contrast_ptr
  11.     .xref    _stage_palet_table
  12.  
  13.  
  14.  
  15. GVRAM        equ    $c0_0000
  16. GRPALET        equ    $e8_2000
  17.  
  18. BG_DRAWING    equ    1
  19. BG_FADEIN    equ    2
  20.  
  21. BG_PALETS    equ    64    * BGで使用しているパレット数
  22.  
  23.     .text
  24.     .even
  25.  
  26.  
  27. _GvramInit:        * 各面開始時に呼ばれる
  28.     movem.l    d1/a0-a1,-(sp)
  29.  
  30.     moveq.l    #0,d1
  31.     move.b    _stage,d1    * d1.l = 面数
  32.  
  33.     lea.l    _bg_map,a0
  34.     move.w    d1,d0
  35.     mulu.w    #30+32*128*2,d0
  36.     adda.w    d0,a0
  37.     adda.w    #30,a0        * .MAP のヘッダを飛ばす
  38.     move.l    a0,bg_map_work    *
  39.  
  40.     lea.l    _bg_sp,a0
  41.     move.w    d1,d0
  42.     mulu.w    #32*256,d0
  43.     adda.w    d0,a0
  44.     move.l    a0,bg_sp_work    *
  45.  
  46.             * otoko.c VdispRoutine() で参照するワークを設定
  47.     lea.l    _stage_palet_table,a0
  48.     move.w    d1,d0
  49.     addq.w    #1,d0
  50.     mulu.w    #33*BG_PALETS*2,d0
  51.     sub.w    #BG_PALETS*2,d0
  52.     adda.l    d0,a0
  53.     move.l    a0,_bg_contrast_ptr    *
  54.  
  55.     move.w    #BG_DRAWING,_bg_contrast_control
  56.  
  57.     clr.w    gvram_counter
  58.     move.l    #GVRAM,gvram_work
  59.  
  60.  
  61.             * グラフィック画面のパレットをクリアする
  62.     suba.l    a1,a1
  63.     IOCS    _B_SUPER
  64.     move.l    d0,-(sp)        **
  65.  
  66.     moveq.l    #0,d1
  67.     lea.l    GRPALET,a1
  68.     move.w    #(BG_PALETS+16)/4/2-1,d0
  69. @@:    move.l    d1,(a1)+
  70.     move.l    d1,(a1)+
  71.     move.l    d1,(a1)+
  72.     move.l    d1,(a1)+
  73.     dbra    d0,@b
  74.  
  75.     movea.l    (sp)+,a1        **
  76.     IOCS    _B_SUPER
  77.  
  78.     movem.l    (sp)+,d1/a0-a1
  79.     rts
  80.  
  81.  
  82.  
  83. *********************************************************
  84. _GvramMove:
  85.     cmpi.w    #BG_DRAWING,_bg_contrast_control    * 処理の必要はある?
  86.     bne    GvramMove_rts
  87.  
  88.     movem.l    d1/a1,-(sp)
  89.  
  90.     suba.l    a1,a1
  91.     IOCS    _B_SUPER
  92.     move.l    d0,-(sp)        **
  93.  
  94.     move.l    gvram_work,-(sp)
  95.     move.l    bg_map_work,-(sp)
  96.     bsr    putbg32
  97.     addq.w    #8,sp
  98.  
  99.     addi.l    #32*2,bg_map_work
  100.     move.l    d0,gvram_work
  101.  
  102.     movea.l    (sp)+,a1        **
  103.     IOCS    _B_SUPER
  104.  
  105.  
  106.     move.w    gvram_counter,d0
  107.     addq.w    #1,d0
  108.     cmpi.w    #128,d0        * 描画完了?
  109.     bcs    @f
  110.     move.w    #BG_FADEIN,_bg_contrast_control    * フェードイン開始
  111.     moveq.l    #0,d0
  112. @@:    move.w    d0,gvram_counter
  113.  
  114.     movem.l    (sp)+,d1/a1
  115. GvramMove_rts:
  116.     rts
  117.  
  118.  
  119.  
  120. ****    ****
  121. putbg32:        * BGデータを32個(横256ドット分)グラフィック画面に描画する
  122.             * in  : 8(a6).l = MAP データ
  123.             *    12(a6).l = GVRAM
  124.             * out : d0.l = 次のGVRAM
  125.     link    a6,#0
  126.     movem.l    d1-d4/a0-a5,-(sp)
  127.  
  128.     move.l    8(a6),a1    * a1.l = MAPデータ
  129.     move.l    12(a6),a2    * a2.l = GVRAM
  130.  
  131.     move.l    bg_sp_work,a5    * a5.l = スプライトデータ(定数)
  132.     moveq.l    #$f,d2        * d2.w = 定数
  133.     moveq.l    #32-1,d4    * 
  134. putbg32_loop:
  135.     move.w    (a1)+,d0    * d0.w = BGデータ
  136.     move.w    d0,d1
  137.     andi.w    #$00ff,d0
  138.     lsl.w    #5,d0        * BG 1個当たり32バイトだから32倍
  139.     lea.l    (a5,d0.w),a4    * a4.l = PCGパターン
  140.  
  141.     move.w    d1,d0
  142.     lsr.w    #3,d0
  143.     andi.w    #$01e0,d0    * d0.w = パレット
  144.     lea.l    bg_table(pc),a3
  145.     adda.w    d0,a3        * a3.l = bg_table にパレットを加算したもの
  146.             * BGのVH反転フラグによって分岐
  147.     btst.l    #15,d1
  148.     bne    putbg32_v
  149.     btst.l    #14,d1
  150.     bne    putbg32_h
  151.  
  152.  
  153.             * VH=00
  154.     movea.l    a2,a0        * a0.l =
  155.     moveq.l    #0,d0
  156.     moveq.l    #8-1,d3
  157. @@:
  158.     .rept    4
  159.     move.b    (a4)+,d0
  160.     move.w    d0,d1
  161.  
  162.     lsr.w    #4,d0
  163.     add.w    d0,d0
  164.     move.w    (a3,d0.w),(a0)+
  165.  
  166.     and.w    d2,d1
  167.     add.w    d1,d1
  168.     move.w    (a3,d1.w),(a0)+
  169.     .endm
  170.  
  171.     lea.l    1024-16(a0),a0
  172.     dbra    d3,@b
  173.  
  174.     bra    putbg32_next
  175.  
  176.  
  177. putbg32_v:
  178.     btst.l    #14,d1
  179.     bne    putbg32_vh
  180.  
  181.             * VH=10
  182.     lea.l    1024*7(a2),a0    * a0.l = 書き込むGVRAM
  183.     moveq.l    #0,d0
  184.     moveq.l    #8-1,d3
  185. @@:
  186.     .rept    4
  187.     move.b    (a4)+,d0
  188.     move.w    d0,d1
  189.  
  190.     lsr.w    #4,d0
  191.     add.w    d0,d0
  192.     move.w    (a3,d0.w),(a0)+
  193.  
  194.     and.w    d2,d1
  195.     add.w    d1,d1
  196.     move.w    (a3,d1.w),(a0)+
  197.     .endm
  198.  
  199.     lea.l    -1024-16(a0),a0
  200.     dbra    d3,@b
  201.  
  202.     bra    putbg32_next
  203.  
  204.  
  205. putbg32_h:        * VH=01
  206.     lea.l    16(a2),a0    * a0.l = 書き込むGVRAM
  207.     moveq.l    #0,d0
  208.     moveq.l    #8-1,d3
  209. @@:
  210.     .rept    4
  211.     move.b    (a4)+,d0
  212.     move.w    d0,d1
  213.  
  214.     lsr.w    #4,d0
  215.     add.w    d0,d0
  216.     move.w    (a3,d0.w),-(a0)
  217.  
  218.     and.w    d2,d1
  219.     add.w    d1,d1
  220.     move.w    (a3,d1.w),-(a0)
  221.  
  222.     .endm
  223.  
  224.     lea.l    1024+16(a0),a0
  225.     dbra    d3,@b
  226.  
  227.     bra    putbg32_next
  228.  
  229.  
  230. putbg32_vh:        * VH=11
  231.     lea.l    1024*7+16(a2),a0    * a0.l = 書き込むGVRAM
  232.     moveq.l    #0,d0
  233.     moveq.l    #8-1,d3
  234. @@:
  235.     .rept    4
  236.     move.b    (a4)+,d0
  237.     move.w    d0,d1
  238.  
  239.     lsr.w    #4,d0
  240.     add.w    d0,d0
  241.     move.w    (a3,d0.w),-(a0)
  242.  
  243.     and.w    d2,d1
  244.     add.w    d1,d1
  245.     move.w    (a3,d1.w),-(a0)
  246.     .endm
  247.  
  248.     lea.l    -1024+16(a0),a0
  249.     dbra    d3,@b
  250.  
  251.  
  252. putbg32_next:
  253.     lea.l    16(a2),a2
  254.     dbra    d4,putbg32_loop
  255.  
  256.     lea.l    1024*8-512(a2),a2
  257.  
  258.     move.l    a2,d0
  259.     movem.l    (sp)+,d1-d4/a0-a5
  260.     unlk    a6
  261.     rts
  262.  
  263.  
  264. *********************************************************
  265. _GvramTini:
  266.     moveq.l    #0,d0
  267.     rts
  268.  
  269.  
  270. *********************************************************
  271. bg_table:        * ゼロプライオリティ対策のためこういうテーブルが必要
  272.     .dc.w    $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c,$0d,$0e,$0f
  273.     .dc.w    $00,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f
  274.     .dc.w    $00,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
  275.     .dc.w    $00,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
  276.     .dc.w    $00,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
  277.     .dc.w    $00,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
  278.     .dc.w    $00,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
  279.     .dc.w    $00,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f
  280.     .dc.w    $00,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f
  281.     .dc.w    $00,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f
  282.     .dc.w    $00,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af
  283.     .dc.w    $00,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf
  284.     .dc.w    $00,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf
  285.     .dc.w    $00,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df
  286.     .dc.w    $00,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef
  287.     .dc.w    $00,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff
  288.     .even
  289.  
  290.  
  291.     .bss
  292.     .even
  293. bg_map_work:
  294.     .ds.l    1
  295. bg_sp_work:
  296.     .ds.l    1
  297. bg_pal_work:
  298.     .ds.l    1
  299. gvram_counter:
  300.     .ds.w    1
  301. gvram_work:
  302.     .ds.l    1
  303.  
  304.